home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Audio / Patchmix / XWindowsSource / xset.c < prev   
C/C++ Source or Header  |  1992-03-28  |  24KB  |  839 lines

  1. static char rcsid[] = "$Header: xset.c,v 1.6 91/02/13 09:47:36 mara Exp $";
  2.  
  3. /*  xset.c
  4.  *
  5.  *  Written by Mara Helmuth
  6.  *
  7.  *  Description: X graphics functions in C
  8.  *     called by graphics class
  9.  *    for Cmix X graphical interface
  10.  * 
  11.  *  $Log:    xset.c,v $
  12.  * Revision 1.6  91/02/13  09:47:36  mara
  13.  * panel fixes (main)
  14.  * 
  15.  * Revision 1.5  90/09/08  12:51:16  mara
  16.  * side panel
  17.  * 
  18.  * Revision 1.4  90/09/07  20:51:15  mara
  19.  * fm
  20.  * 
  21.  * Revision 1.3  90/09/05  22:12:59  mara
  22.  * many fixes, +,-,*,/ ugens added
  23.  * 
  24.  * Revision 1.2  90/09/02  18:17:15  mara
  25.  * most NeXT graphics fixes
  26.  * 
  27.  * Revision 1.1  90/08/27  17:10:35  mara
  28.  * Initial revision
  29.  * 
  30.  */
  31.  
  32. /*#include <g++/stdio.h>
  33. #include <g++/std.h>
  34.  
  35. extern "C"
  36. {
  37. #include <X11/Xlib.h>
  38. #include <X11/Xutil.h>
  39. #include "/usr/local/src/lxt/lxt.h"
  40. #include "x.h"
  41.  
  42. #include "bitmap/oscil.bitmap"
  43. #include "bitmap/add.bitmap"
  44. #include "bitmap/subtract.bitmap"
  45. #include "bitmap/multiply.bitmap"
  46. #include "bitmap/divide.bitmap"
  47. #include "bitmap/out.bitmap"
  48. #include "bitmap/dot.bitmap"
  49. }
  50. */
  51.  
  52. #define    XSET    1
  53.  
  54. #include "plus.h"
  55.  
  56. void setup_windows(int argc, char *argv[])
  57. {
  58.     unsigned int bw;
  59.     XSizeHints xsh;
  60.     char *display;
  61.  
  62.     boolean lxt_event();
  63.  
  64.     progname= *argv;
  65.     display= (char *) NULL;
  66.  
  67.     if ((dpy = XOpenDisplay(display)) == NULL) {
  68.         (void) fprintf(stderr, "%s: can't open display %s\n", argv[0], display);
  69.         exit(1);
  70.     }
  71.     if ((fontstruct = XLoadQueryFont(dpy, FONT)) == NULL) {
  72.         (void) fprintf(stderr, "%s: display %s doesn't know font %s\n", argv[0], DisplayString(dpy), FONT);
  73.         exit(1);
  74.     }
  75.     if ((fontstructS = XLoadQueryFont(dpy, SMALL_FONT)) == NULL) {
  76.         (void) fprintf(stderr, "%s: display %s doesn't know font %s\n", argv[0], DisplayString(dpy), SMALL_FONT);
  77.         exit(1);
  78.     }
  79.  
  80.     white= WhitePixel(dpy, DefaultScreen(dpy));
  81.     black= BlackPixel(dpy, DefaultScreen(dpy));
  82.     bw= 2;
  83.  
  84. /************ Default Instrument Data **************************************/
  85.  
  86.     ugen[ugen_no].type = 0;
  87.  
  88. /************ Enclosing frame window ***************************************/
  89.  
  90.     xsh.flags= (PPosition | PSize);
  91.     xsh.height= WFRAME_HEIGHT;
  92.     xsh.width= WFRAME_WIDTH;
  93.     xsh.x= (DisplayWidth(dpy, DefaultScreen(dpy)) - xsh.width) / 2;
  94.     xsh.y= (DisplayHeight(dpy, DefaultScreen(dpy)) - xsh.height) / 2;
  95.  
  96.     wwin= XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), xsh.x, xsh.y, xsh.width, xsh.height, bw, black, white);
  97.     XSetStandardProperties(dpy, wwin, "patchmix", "wwindow", None, argv, argc, &xsh);
  98.     XSetWMHints(dpy, wwin, &xwmh);
  99.  
  100. /************ Top panel window *********************************************/
  101.  
  102.     xsh.height= PFRAME_HEIGHT;
  103.     xsh.width= PFRAME_WIDTH;
  104.     xsh.x= 0;
  105.     xsh.y= 0;
  106.  
  107.     pwin= XCreateSimpleWindow(dpy, wwin, xsh.x, xsh.y, xsh.width, xsh.height, bw, black, white);
  108.     XSetStandardProperties(dpy, pwin, "patchmix", "panel", None, argv, argc, &xsh);
  109.     XSetWMHints(dpy, pwin, &xwmh);
  110.  
  111.  
  112. /************ Quit window **************************************************/
  113.  
  114.     xsh.height= QFRAME_HEIGHT;
  115.     xsh.width= QFRAME_WIDTH;
  116.     xsh.x= (DisplayWidth(dpy, DefaultScreen(dpy)) - xsh.width) / 2;
  117.     xsh.y= (DisplayHeight(dpy, DefaultScreen(dpy)) - xsh.height) / 2;
  118.  
  119.     qwin= XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), xsh.x, xsh.y, xsh.width, xsh.height, bw, black, white);
  120.     XSetStandardProperties(dpy, qwin, "patchmix", "qpanel", None, argv, argc, &xsh);
  121.     XSetWMHints(dpy, qwin, &xwmh);
  122.  
  123. /************ Oscil window **************************************************/
  124.  
  125.     xsh.height= OFRAME_HEIGHT;
  126.     xsh.width= OFRAME_WIDTH;
  127.     xsh.x= (DisplayWidth(dpy, DefaultScreen(dpy)) - xsh.width) / 2;
  128.     xsh.y= (DisplayHeight(dpy, DefaultScreen(dpy)) - xsh.height) / 2;
  129.  
  130.     oscwin= XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), xsh.x, xsh.y, xsh.width, xsh.height, bw, black, white);
  131.     XSetStandardProperties(dpy, oscwin, "patchmix", "oscpanel", None, argv, argc, &xsh);
  132.     XSetWMHints(dpy, oscwin, &xwmh);
  133.  
  134. /************ Evp window **************************************************/
  135.  
  136.     xsh.height= EFRAME_HEIGHT;
  137.     xsh.width= EFRAME_WIDTH;
  138.     xsh.x= (DisplayWidth(dpy, DefaultScreen(dpy)) - xsh.width) / 2;
  139.     xsh.y= (DisplayHeight(dpy, DefaultScreen(dpy)) - xsh.height) / 2;
  140.  
  141.     evpwin= XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), xsh.x, xsh.y, xsh.width, xsh.height, bw, black, white);
  142.     XSetStandardProperties(dpy, evpwin, "patchmix", "evppanel", None, argv, argc, &xsh);
  143.     XSetWMHints(dpy, evpwin, &xwmh);
  144.  
  145. /************ Buzz window **************************************************/
  146.  
  147.     xsh.height= OFRAME_HEIGHT;
  148.     xsh.width= OFRAME_WIDTH;
  149.     xsh.x= (DisplayWidth(dpy, DefaultScreen(dpy)) - xsh.width) / 2;
  150.     xsh.y= (DisplayHeight(dpy, DefaultScreen(dpy)) - xsh.height) / 2;
  151.  
  152.     buzzwin= XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), xsh.x, xsh.y, xsh.width, xsh.height, bw, black, white);
  153.     XSetStandardProperties(dpy, oscwin, "patchmix", "buzzpanel", None, argv, argc, &xsh);
  154.     XSetWMHints(dpy, buzzwin, &xwmh);
  155.  
  156. /************ Side window **************************************************/
  157.  
  158.     xsh.height= SFRAME_HEIGHT;
  159.     xsh.width= SFRAME_WIDTH;
  160.     xsh.x= (DisplayWidth(dpy, DefaultScreen(dpy)) - xsh.width) / 2;
  161.     xsh.y= (DisplayHeight(dpy, DefaultScreen(dpy)) - xsh.height) / 2;
  162.  
  163.     sidewin= XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), xsh.x, xsh.y, xsh.width, xsh.height, bw, black, white);
  164.     XSetStandardProperties(dpy, sidewin, "patchmix", "sidepanel", None, argv, argc, &xsh);
  165.     XSetWMHints(dpy, sidewin, &xwmh);
  166.  
  167. /************ Instrument Data window *****************************************/
  168.  
  169.     xsh.height= DFRAME_HEIGHT;
  170.     xsh.width= DFRAME_WIDTH;
  171.     xsh.x= (DisplayWidth(dpy, DefaultScreen(dpy)) - xsh.width) / 2;
  172.     xsh.y= (DisplayHeight(dpy, DefaultScreen(dpy)) - xsh.height) / 2;
  173.  
  174.     datwin= XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), xsh.x, xsh.y, xsh.width, xsh.height, bw, black, white);
  175.     XSetStandardProperties(dpy, datwin, "patchmix", "datpanel", None, argv, argc, &xsh);
  176.     XSetWMHints(dpy, datwin, &xwmh);
  177.  
  178. /*************** Canvas window *********************************************/
  179.  
  180.     xsh.height= CFRAME_HEIGHT;
  181.     xsh.width= CFRAME_WIDTH;
  182.     xsh.x= 0;
  183.     xsh.y= 190;
  184.     cwin= XCreateSimpleWindow(dpy, wwin, xsh.x, xsh.y, xsh.width, xsh.height, bw, black, white);
  185.     XSetStandardProperties(dpy, cwin, "patchmix", "canvas", None, argv, argc, &xsh);
  186.     XSetWMHints(dpy, cwin, &xwmh);
  187.  
  188. /*************** Menu window *********************************************/
  189.  
  190. /* Set properties & hints for the menu_bar window and create it */
  191.  
  192.     xsh.height= MFRAME_HEIGHT;
  193.     xsh.width= MFRAME_WIDTH;
  194.     xsh.x= 0;
  195.     xsh.y= 150;
  196.     mwin= XCreateSimpleWindow(dpy, wwin, xsh.x, xsh.y, xsh.width, 
  197.         xsh.height, bw, black, white );
  198.     XSetStandardProperties(dpy, mwin, "patchmix", "canvas", None, argv, argc, &xsh);
  199.     XSetWMHints(dpy, mwin, &xwmh);
  200.  
  201. /************ Text window **************************************************/
  202.  
  203.     xsh.height= TFRAME_HEIGHT;
  204.     xsh.width= TFRAME_WIDTH;
  205.     xsh.x= (DisplayWidth(dpy, DefaultScreen(dpy)) - xsh.width) / 2;
  206.     xsh.y= (DisplayHeight(dpy, DefaultScreen(dpy)) - xsh.height) / 2;
  207.     twin= XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), xsh.x, xsh.y, xsh.width, xsh.height, bw, black, white);
  208.     XSetStandardProperties(dpy, twin, "patchmix", "textsw", None, argv, argc, &xsh);
  209.     XSetWMHints(dpy, twin, &xwmh);
  210.  
  211. /***************************************************************************/
  212.  
  213.     (void) strcpy(font, FONT);
  214.     (void) strcpy(small_font, SMALL_FONT);
  215. }
  216.  
  217.  
  218. void map_windows()
  219. {
  220.     XMapWindow(dpy, wwin);
  221.     XMapWindow(dpy, pwin);
  222.     XMapWindow(dpy, cwin);
  223.     XMapWindow(dpy, mwin);
  224. }
  225.  
  226. void setup_canvas()
  227. {
  228.     XGCValues gcv;
  229.     int ss = SBITMAP_SIZE;
  230.  
  231.     if ((canvas = canvas_create(progname, dpy, cwin,
  232.             LXC_WIDTH, CANVAS_WIDTH,
  233.             LXC_HEIGHT, CANVAS_HEIGHT,
  234.             LXC_NULL)) == (Canvas *) NULL)
  235.         exit(-1);
  236.     canvas_win= *((Window *) canvas_get(canvas, LXC_WINDOW));
  237.     canvas_pm= *((Pixmap *) canvas_get(canvas, LXC_PIXMAP));
  238.  
  239.     gcv.function = GXxor;
  240.     gcv.font = fontstruct->fid;
  241.     gcv.foreground = black^white;
  242.     gcv.background = white;
  243.     gcv.plane_mask = black^white; // was |
  244.     canvas_gc = XCreateGC(dpy, canvas_win, (GCFunction | GCFont | GCForeground | GCBackground | GCPlaneMask), &gcv);
  245.     XSetPlaneMask(dpy, canvas_gc, black^white);
  246. // previous lines modified for portability
  247.  
  248.     gcv.font = fontstructS->fid;
  249.     gcv.plane_mask = black ^ white;
  250.     sf_gc = XCreateGC(dpy, canvas_win, (GCFunction | GCFont | GCForeground | GCBackground | GCPlaneMask), &gcv);
  251.  
  252.  
  253.     gcv.function = GXset;
  254.     gcv.plane_mask = black ^ white;
  255.     clear_gc = XCreateGC(dpy, canvas_win, (GCFunction | GCFont | GCForeground | GCBackground | GCPlaneMask), &gcv);
  256.  
  257.     XSelectInput(dpy, canvas_win, ExposureMask | ButtonPressMask | ButtonMotionMask);
  258.  
  259.     /* plot images on canvas */
  260.     XPutImage(dpy, canvas_pm, canvas_gc, add_im, 0, 0, 0, 10,
  261.         ss, ss);
  262.     XPutImage(dpy, canvas_pm, canvas_gc, subtract_im, 0, 0, 0, 70,
  263.         ss, ss);
  264.     XPutImage(dpy, canvas_pm, canvas_gc, multiply_im, 0, 0, 0, 130,
  265.         ss, ss);
  266.     XPutImage(dpy, canvas_pm, canvas_gc, divide_im, 0, 0, 0, 190,
  267.         ss, ss);
  268.     XPutImage(dpy, canvas_pm, canvas_gc, out_im, 0, 0, 0, 250,
  269.         ss, ss);
  270. }
  271.  
  272. void setup_panel()
  273. {
  274.     Panel *panel_create();
  275.     Panel_item *panelitem_create();
  276.  
  277.     if ((panel= panel_create(progname, dpy, pwin,
  278.             LXP_FONT, font,
  279.             LXP_NULL)) == (Panel *) NULL)
  280.         exit(-1);
  281.     if ((title= panelitem_create(panel, LXPI_LABEL,
  282.             LXPI_X, PFRAME_WIDTH*2/3,
  283.             LXPI_Y, 10,
  284.             LXPI_STRING, "PATCHMIX",
  285.             LXPI_NULL)) == (Panel_item *) NULL)
  286.         exit(-1);
  287.     if ((pi_name= panelitem_create(panel, LXPI_TEXT,
  288.             LXPI_X, 10,
  289.             LXPI_Y, 20,
  290.             LXPI_STRING, "Name:",
  291.             LXPTEXT_MAXSTORE, 50,
  292.             LXPTEXT_MAXDISPLAY, 20,
  293.             LXPTEXT_VALUE, "inst1", 
  294.             LXPTEXT_PROC, pi_name_proc,    
  295.             LXPI_NULL)) == (Panel_item *) NULL)
  296.         exit(-1);
  297.     if ((pi_srate= panelitem_create(panel, LXPI_TEXT,
  298.             LXPI_X, 10,
  299.             LXPI_Y, 50,
  300.             LXPI_STRING, "Sampling Rate:",
  301.             LXPTEXT_MAXSTORE, 20,
  302.             LXPTEXT_MAXDISPLAY, 20,
  303.             LXPTEXT_VALUE, "22050",
  304.             LXPTEXT_PROC, pi_srate_proc,    
  305.             LXPI_NULL)) == (Panel_item *) NULL)
  306.         exit(-1);
  307.  
  308. /* display this only when input file exists */
  309.     if ((pi_inchans= panelitem_create(panel, LXPI_CYCLE,
  310.             LXPI_X, 10,
  311.             LXPI_Y, 80,
  312.             LXPI_STRING, "Input Channels:",
  313.             LXPENUM_SELSTRINGS, "From Input File", "Mono", "Stereo", (char *) NULL,
  314.             LXPENUM_VALUE, "1",
  315.             LXPI_NULL)) == (Panel_item *) NULL)
  316.         exit(-1);
  317.  
  318.     if ((pi_outchans= panelitem_create(panel, LXPI_CYCLE,
  319.             LXPI_X, 10,
  320.             LXPI_Y, 110, 
  321.             LXPI_STRING, "Output Channels:",
  322.             LXPENUM_SELSTRINGS, "Mono", "Stereo", (char *) NULL,
  323.             LXPENUM_VALUE, "0",
  324.             LXPI_NULL)) == (Panel_item *) NULL)
  325.         exit(-1);
  326.  
  327.     if ((compile_button= panelitem_create(panel, LXPI_BUTTON,
  328.             LXPI_X, PFRAME_WIDTH/2,
  329.             LXPI_Y, 20,
  330.             LXPI_STRING, "Compile",
  331.             LXPI_PROC, compile,
  332.             LXPI_NULL)) == (Panel_item *) NULL)
  333.         exit(-1);
  334.     if ((set_data_button= panelitem_create(panel, LXPI_BUTTON,
  335.             LXPI_X, PFRAME_WIDTH/2,
  336.             LXPI_Y, 60,
  337.             LXPI_STRING, "Set Data",
  338.             LXPI_PROC, set_data,
  339.             LXPI_NULL)) == (Panel_item *) NULL)
  340.         exit(-1);
  341.     if ((run_button= panelitem_create(panel, LXPI_BUTTON,
  342.             LXPI_X, PFRAME_WIDTH/2,
  343.             LXPI_Y, 100,
  344.             LXPI_STRING, "Run",
  345.             LXPI_PROC, run,
  346.             LXPI_NULL)) == (Panel_item *) NULL)
  347.         exit(-1);
  348.     if ((rescale_button= panelitem_create(panel, LXPI_BUTTON,
  349.             LXPI_X, PFRAME_WIDTH*2/3,
  350.             LXPI_Y, 50,
  351.             LXPI_STRING, "Rescale",
  352.             LXPI_PROC, rescale,
  353.             LXPI_NULL)) == (Panel_item *) NULL)
  354.         exit(-1);
  355.     if ((play_button= panelitem_create(panel, LXPI_BUTTON,
  356.             LXPI_X, PFRAME_WIDTH*2/3,
  357.             LXPI_Y, 100,
  358.             LXPI_STRING, "Play",
  359.             LXPI_PROC, play,
  360.             LXPI_NULL)) == (Panel_item *) NULL)
  361.         exit(-1);
  362.     if ((reset_button= panelitem_create(panel, LXPI_BUTTON,
  363.             LXPI_X, PFRAME_WIDTH*5/6,
  364.             LXPI_Y, 50,
  365.             LXPI_STRING, "Reset",
  366.             LXPI_PROC, reset_choice,
  367.             LXPI_NULL)) == (Panel_item *) NULL)
  368.         exit(-1);
  369.  
  370.     if ((quit_button= panelitem_create(panel, LXPI_BUTTON,
  371.             LXPI_X, PFRAME_WIDTH*5/6,
  372.             LXPI_Y, 100,
  373.             LXPI_STRING, "Exit",
  374.             LXPI_PROC, quit,
  375.             LXPI_NULL)) == (Panel_item *) NULL)
  376.         exit(-1);
  377. }
  378.  
  379. void setup_qpanel()
  380. {
  381.     Panel *panel_create();
  382.     Panel_item *panelitem_create();
  383.  
  384.     if ((qpanel= panel_create(progname, dpy, qwin,
  385.             LXP_FONT, font,
  386.             LXP_NULL)) == (Panel *) NULL)
  387.         exit(-1);
  388.     if ((qmsg= panelitem_create(qpanel, LXPI_LABEL,
  389.             LXPI_X, 10,
  390.             LXPI_Y, 20,
  391.             LXPI_STRING, "\"Confirm exit?\"",
  392.             LXPI_NULL)) == (Panel_item *) NULL)
  393.         exit(-1);
  394.     if ((no_button= panelitem_create(qpanel, LXPI_BUTTON,
  395.             LXPI_X, 10,
  396.             LXPI_Y, 50,
  397.             LXPI_STRING, "Cancel",
  398.             LXPI_PROC, no,
  399.             LXPI_NULL)) == (Panel_item *) NULL)
  400.         exit(-1);
  401.     if ((ok_button= panelitem_create(qpanel, LXPI_BUTTON,
  402.             LXPI_X, QFRAME_WIDTH/2,
  403.             LXPI_Y, 50,
  404.             LXPI_STRING, "Quit",
  405.             LXPI_PROC, ok,
  406.             LXPI_NULL)) == (Panel_item *) NULL)
  407.         exit(-1);
  408. }
  409.  
  410. void setup_oscpanel()
  411. {
  412.     Panel *panel_create();
  413.     Panel_item *panelitem_create();
  414.     
  415.     if ((oscpanel= panel_create(progname, dpy, oscwin,
  416.             LXP_FONT, font,
  417.             LXP_NULL)) == (Panel *) NULL)
  418.         exit(-1);
  419.  
  420.     if ((osctitle= panelitem_create(oscpanel, LXPI_LABEL,
  421.             LXPI_X, 20,
  422.             LXPI_Y, 10,
  423.             LXPI_STRING, "OSCIL PARAMS:",
  424.             LXPI_NULL)) == (Panel_item *) NULL)
  425.         exit(-1);
  426.  
  427.     if ((oscamp= panelitem_create(oscpanel, LXPI_TEXT,
  428.             LXPI_X, 10,
  429.             LXPI_Y, 50,
  430.             LXPI_STRING, "Amplitude:",
  431.             LXPTEXT_MAXSTORE, 15,
  432.             LXPTEXT_MAXDISPLAY, 10,
  433.             LXPTEXT_VALUE, temp_ugen.oscil->amp->value,
  434.             LXPTEXT_IPOS, strlen(temp_ugen.oscil->amp->value), 
  435.             LXPTEXT_PROC, oscamp_proc,    
  436.             LXPI_NULL)) == (Panel_item *) NULL)
  437.         exit(-1);
  438.  
  439.     if ((oscfreq= panelitem_create(oscpanel, LXPI_TEXT,
  440.             LXPI_X, 10,
  441.             LXPI_Y, 80,
  442.             LXPI_STRING, "Frequency:",
  443.             LXPTEXT_MAXSTORE, 10,
  444.             LXPTEXT_MAXDISPLAY, 6,
  445.             LXPTEXT_VALUE, temp_ugen.oscil->freq->value,
  446.             LXPTEXT_IPOS, strlen(temp_ugen.oscil->freq->value), 
  447.             LXPTEXT_PROC, oscfreq_proc,    
  448.             LXPI_NULL)) == (Panel_item *) NULL)
  449.         exit(-1);
  450.  
  451.     if ((oscphs= panelitem_create(oscpanel, LXPI_TEXT,
  452.  
  453.             LXPI_X, 10,
  454.             LXPI_Y, 110,
  455.             LXPI_STRING, "Phase:",
  456.             LXPTEXT_MAXSTORE, 5,
  457.             LXPTEXT_MAXDISPLAY, 3,
  458.             LXPTEXT_VALUE, temp_ugen.oscil->phs->value,
  459.             LXPTEXT_IPOS, strlen(temp_ugen.oscil->phs->value), 
  460.             LXPTEXT_PROC, oscphs_proc,    
  461.             LXPI_NULL)) == (Panel_item *) NULL)
  462.         exit(-1);
  463.     
  464.     if ((resetosc_button= panelitem_create(oscpanel, LXPI_BUTTON,
  465.             LXPI_X, OFRAME_WIDTH*2/3,
  466.             LXPI_Y, 50,
  467.             LXPI_STRING, "Reset",
  468.             LXPI_PROC, reset_oscil,
  469.             LXPI_NULL)) == (Panel_item *) NULL)
  470.         exit(-1);
  471.  
  472.     if ((quitosc_button= panelitem_create(oscpanel, LXPI_BUTTON,
  473.             LXPI_X, OFRAME_WIDTH*2/3,
  474.             LXPI_Y, 95,
  475.             LXPI_STRING, "Exit",
  476.             LXPI_PROC, quit_oscil,
  477.             LXPI_NULL)) == (Panel_item *) NULL)
  478.         exit(-1);
  479. }
  480.  
  481. void setup_evppanel()
  482. {
  483.     Panel *panel_create();
  484.     Panel_item *panelitem_create();
  485.     
  486.     if ((evppanel= panel_create(progname, dpy, evpwin,
  487.             LXP_FONT, font,
  488.             LXP_NULL)) == (Panel *) NULL)
  489.         exit(-1);
  490.  
  491.     if ((evptitle= panelitem_create(evppanel, LXPI_LABEL,
  492.             LXPI_X, 20,
  493.             LXPI_Y, 10,
  494.             LXPI_STRING, "EVP PARAMS:",
  495.             LXPI_NULL)) == (Panel_item *) NULL)
  496.         exit(-1);
  497.  
  498.     if ((evpamp= panelitem_create(evppanel, LXPI_TEXT,
  499.             LXPI_X, 10,
  500.             LXPI_Y, 50,
  501.             LXPI_STRING, "Amplitude:",
  502.             LXPTEXT_MAXSTORE, 15,
  503.             LXPTEXT_MAXDISPLAY, 10,
  504.             LXPTEXT_VALUE, temp_ugen.evp->amp->value,
  505.             LXPTEXT_IPOS, strlen(temp_ugen.evp->amp->value), 
  506.             LXPTEXT_PROC, evpamp_proc,    
  507.             LXPI_NULL)) == (Panel_item *) NULL)
  508.         exit(-1);
  509.  
  510.     if ((evprise= panelitem_create(evppanel, LXPI_TEXT,
  511.             LXPI_X, 10,
  512.             LXPI_Y, 80,
  513.             LXPI_STRING, "Rise Time:",
  514.             LXPTEXT_MAXSTORE, 4,
  515.             LXPTEXT_MAXDISPLAY, 4,
  516.             LXPTEXT_VALUE, temp_ugen.evp->rise->value,
  517.             LXPTEXT_IPOS, strlen(temp_ugen.evp->rise->value), 
  518.             LXPTEXT_PROC, evprise_proc,    
  519.             LXPI_NULL)) == (Panel_item *) NULL)
  520.         exit(-1);
  521.  
  522.     if ((evpdecay= panelitem_create(evppanel, LXPI_TEXT,
  523.  
  524.             LXPI_X, 10,
  525.             LXPI_Y, 110,
  526.             LXPI_STRING, "Decay Time:",
  527.             LXPTEXT_MAXSTORE, 4,
  528.             LXPTEXT_MAXDISPLAY, 4,
  529.             LXPTEXT_VALUE, temp_ugen.evp->decay->value,
  530.             LXPTEXT_IPOS, strlen(temp_ugen.evp->decay->value), 
  531.             LXPTEXT_PROC, evpdecay_proc,    
  532.             LXPI_NULL)) == (Panel_item *) NULL)
  533.         exit(-1);
  534.     
  535.     if ((evpfunc= panelitem_create(evppanel, LXPI_CYCLE,
  536.             LXPI_X, 10,
  537.             LXPI_Y, 140,
  538.             LXPI_STRING, "Rise/Decay Function:",
  539.             LXPENUM_SELSTRINGS, "Linear", "Exponential", (char *) NULL,
  540.             LXPENUM_VALUE, "0",
  541.             LXPI_NULL)) == (Panel_item *) NULL)
  542.         exit(-1);
  543.  
  544.     if ((resetevp_button= panelitem_create(evppanel, LXPI_BUTTON,
  545.             LXPI_X, EFRAME_WIDTH/2,
  546.             LXPI_Y, 50,
  547.             LXPI_STRING, "Reset",
  548.             LXPI_PROC, reset_evp,
  549.             LXPI_NULL)) == (Panel_item *) NULL)
  550.         exit(-1);
  551.  
  552.     if ((quitevp_button= panelitem_create(evppanel, LXPI_BUTTON,
  553.             LXPI_X, EFRAME_WIDTH/2,
  554.             LXPI_Y, 95,
  555.             LXPI_STRING, "Exit",
  556.             LXPI_PROC, quit_evp,
  557.             LXPI_NULL)) == (Panel_item *) NULL)
  558.         exit(-1);
  559. }
  560.  
  561. void setup_buzzpanel()
  562. {
  563.     Panel *panel_create();
  564.     Panel_item *panelitem_create();
  565.     
  566.     if ((buzzpanel= panel_create(progname, dpy, buzzwin,
  567.             LXP_FONT, font,
  568.             LXP_NULL)) == (Panel *) NULL)
  569.         exit(-1);
  570.  
  571.     if ((buzztitle= panelitem_create(buzzpanel, LXPI_LABEL,
  572.             LXPI_X, 20,
  573.             LXPI_Y, 10,
  574.             LXPI_STRING, "BUZZ PARAMS:",
  575.             LXPI_NULL)) == (Panel_item *) NULL)
  576.         exit(-1);
  577.  
  578.     if ((buzzamp= panelitem_create(buzzpanel, LXPI_TEXT,
  579.             LXPI_X, 10,
  580.             LXPI_Y, 50,
  581.             LXPI_STRING, "Amplitude:",
  582.             LXPTEXT_MAXSTORE, 15,
  583.             LXPTEXT_MAXDISPLAY, 10,
  584.             LXPTEXT_VALUE, temp_ugen.buzz->amp->value,
  585.             LXPTEXT_IPOS, strlen(temp_ugen.buzz->amp->value), 
  586.             LXPTEXT_PROC, buzzamp_proc,    
  587.             LXPI_NULL)) == (Panel_item *) NULL)
  588.         exit(-1);
  589.  
  590.     if ((buzzfreq= panelitem_create(buzzpanel, LXPI_TEXT,
  591.             LXPI_X, 10,
  592.             LXPI_Y, 80,
  593.             LXPI_STRING, "Frequency:",
  594.             LXPTEXT_MAXSTORE, 10,
  595.             LXPTEXT_MAXDISPLAY, 6,
  596.             LXPTEXT_VALUE, temp_ugen.buzz->freq->value,
  597.             LXPTEXT_IPOS, strlen(temp_ugen.buzz->freq->value), 
  598.             LXPTEXT_PROC, buzzfreq_proc,    
  599.             LXPI_NULL)) == (Panel_item *) NULL)
  600.         exit(-1);
  601.  
  602.     if ((buzznhar= panelitem_create(buzzpanel, LXPI_TEXT,
  603.  
  604.             LXPI_X, 10,
  605.             LXPI_Y, 110,
  606.             LXPI_STRING, "No. Harmonics:",
  607.             LXPTEXT_MAXSTORE, 5,
  608.             LXPTEXT_MAXDISPLAY, 3,
  609.             LXPTEXT_VALUE, temp_ugen.buzz->nhar->value,
  610.             LXPTEXT_IPOS, strlen(temp_ugen.buzz->nhar->value), 
  611.             LXPTEXT_PROC, buzznhar_proc,    
  612.             LXPI_NULL)) == (Panel_item *) NULL)
  613.         exit(-1);
  614.     
  615.     if ((resetbuzz_button= panelitem_create(buzzpanel, LXPI_BUTTON,
  616.             LXPI_X, OFRAME_WIDTH*2/3,
  617.             LXPI_Y, 50,
  618.             LXPI_STRING, "Reset",
  619.             LXPI_PROC, reset_buzz,
  620.             LXPI_NULL)) == (Panel_item *) NULL)
  621.         exit(-1);
  622.  
  623.     if ((quitbuzz_button= panelitem_create(buzzpanel, LXPI_BUTTON,
  624.             LXPI_X, OFRAME_WIDTH*2/3,
  625.             LXPI_Y, 95,
  626.             LXPI_STRING, "Exit",
  627.             LXPI_PROC, quit_buzz,
  628.             LXPI_NULL)) == (Panel_item *) NULL)
  629.         exit(-1);
  630. }
  631.  
  632. void setup_sidepanel()
  633. {
  634.     Panel *panel_create();
  635.     Panel_item *panelitem_create();
  636.     
  637.     if ((sidepanel= panel_create(progname, dpy, sidewin,
  638.             LXP_FONT, font,
  639.             LXP_NULL)) == (Panel *) NULL)
  640.         exit(-1);
  641.  
  642.     if ((sidetitle= panelitem_create(sidepanel, LXPI_LABEL,
  643.             LXPI_X, 20,
  644.             LXPI_Y, 10,
  645.             LXPI_STRING, "INPUT PARAMS:",
  646.             LXPI_NULL)) == (Panel_item *) NULL)
  647.         exit(-1);
  648.  
  649.     if ((sidein0= panelitem_create(sidepanel, LXPI_TEXT,
  650.             LXPI_X, 10,
  651.             LXPI_Y, 50,
  652.             LXPI_STRING, "Input Amplitude 1:",
  653.             LXPTEXT_MAXSTORE, 20,
  654.             LXPTEXT_MAXDISPLAY, 10,
  655.             LXPTEXT_VALUE, temp_ugen.side->in0->value,
  656.             LXPTEXT_IPOS, strlen(temp_ugen.side->in1->value), 
  657.             LXPTEXT_PROC, sidein0_proc,    
  658.             LXPI_NULL)) == (Panel_item *) NULL)
  659.         exit(-1);
  660.  
  661.     if ((sidein1= panelitem_create(sidepanel, LXPI_TEXT,
  662.             LXPI_X, 10,
  663.             LXPI_Y, 100,
  664.             LXPI_STRING, "Input Ampitude 2:",
  665.             LXPTEXT_MAXSTORE, 20,
  666.             LXPTEXT_MAXDISPLAY, 10,
  667.             LXPTEXT_VALUE, temp_ugen.side->in1->value,
  668.             LXPTEXT_IPOS, strlen(temp_ugen.side->in1->value), 
  669.             LXPTEXT_PROC, sidein1_proc,    
  670.             LXPI_NULL)) == (Panel_item *) NULL)
  671.         exit(-1);
  672.  
  673.     if ((sidetoggle= panelitem_create(sidepanel, LXPI_TOGGLE,
  674.             LXPI_X, 200,
  675.             LXPI_Y, 20,
  676.             LXPI_STRING, "Data P-Field?:",
  677.             LXPENUM_SELSTRINGS, "Yes", "Yes", 0,
  678.             LXPENUM_SELXS, 130, LXPENUM_LOCTERM,
  679.             LXPENUM_SELYS, 30, 80, LXPENUM_LOCTERM,
  680.             LXPENUM_MARKXS, 110, LXPENUM_LOCTERM,
  681.             LXPENUM_MARKYS, 30, 80, LXPENUM_LOCTERM,
  682.             LXPI_NULL)) == (Panel_item *) NULL)
  683.         exit(-1);
  684.     if ((resetside_button= panelitem_create(sidepanel, LXPI_BUTTON,
  685.             LXPI_X, 500,
  686.             LXPI_Y, 50,
  687.             LXPI_STRING, "Reset",
  688.             LXPI_PROC, reset_side,
  689.             LXPI_NULL)) == (Panel_item *) NULL)
  690.         exit(-1);
  691.     if ((quitside_button= panelitem_create(sidepanel, LXPI_BUTTON,
  692.             LXPI_X, 500,
  693.             LXPI_Y, 150,
  694.             LXPI_STRING, "Exit",
  695.             LXPI_PROC, quit_side,
  696.             LXPI_NULL)) == (Panel_item *) NULL)
  697.         exit(-1);
  698. }
  699.  
  700. void setup_datpanel()
  701. {
  702.     Panel *panel_create();
  703.     Panel_item *panelitem_create();
  704.  
  705.     if ((datpanel= panel_create(progname, dpy, datwin,
  706.             LXP_FONT, font,
  707.             LXP_NULL)) == (Panel *) NULL)
  708.         exit(-1);
  709.  
  710.     if ((dattitle= panelitem_create(datpanel, LXPI_LABEL,
  711.             LXPI_X, 20,
  712.             LXPI_Y, 10,
  713.             LXPI_STRING, "INSTRUMENT DATA:",
  714.             LXPI_NULL)) == (Panel_item *) NULL)
  715.         exit(-1);
  716.  
  717.     if ((datout= panelitem_create(datpanel, LXPI_TEXT,
  718.             LXPI_X, 10,
  719.             LXPI_Y, 50,
  720.             LXPI_STRING, "Outskip:",
  721.             LXPTEXT_MAXSTORE, 15,
  722.             LXPTEXT_MAXDISPLAY, 10,
  723.             LXPTEXT_VALUE, data.outskip,
  724.             LXPTEXT_PROC, datout_proc,    
  725.             LXPI_NULL)) == (Panel_item *) NULL)
  726.         exit(-1);
  727.  
  728.     if ((datdur= panelitem_create(datpanel, LXPI_TEXT,
  729.             LXPI_X, 10,
  730.             LXPI_Y, 80,
  731.             LXPI_STRING, "Duration:",
  732.             LXPTEXT_MAXSTORE, 10,
  733.             LXPTEXT_MAXDISPLAY, 6,
  734.             LXPTEXT_VALUE, data.dur,
  735.             LXPTEXT_PROC, datdur_proc,    
  736.             LXPI_NULL)) == (Panel_item *) NULL)
  737.         exit(-1);
  738.  
  739.     if ((datamp= panelitem_create(datpanel, LXPI_TEXT,
  740.  
  741.             LXPI_X, 10,
  742.             LXPI_Y, 110,
  743.             LXPI_STRING, "Amplitude:",
  744.             LXPTEXT_MAXSTORE, 5,
  745.             LXPTEXT_MAXDISPLAY, 3,
  746.             LXPTEXT_VALUE, data.amp,
  747.             LXPTEXT_PROC, datamp_proc,    
  748.             LXPI_NULL)) == (Panel_item *) NULL)
  749.         exit(-1);
  750.  
  751.     if ((resetdat_button= panelitem_create(datpanel, LXPI_BUTTON,
  752.             LXPI_X, DFRAME_WIDTH*2/3,
  753.             LXPI_Y, 50,
  754.             LXPI_STRING, "Reset",
  755.             LXPI_PROC, reset_dat,
  756.             LXPI_NULL)) == (Panel_item *) NULL)
  757.         exit(-1);
  758.  
  759.     if ((quitdat_button= panelitem_create(datpanel, LXPI_BUTTON,
  760.             LXPI_X, DFRAME_WIDTH*2/3,
  761.             LXPI_Y, 95,
  762.             LXPI_STRING, "Quit/Save",
  763.             LXPI_PROC, quit_dat,
  764.             LXPI_NULL)) == (Panel_item *) NULL)
  765.         exit(-1);
  766. }
  767.  
  768. void setup_images()
  769. {
  770.     Visual *v;
  771.     int d;
  772.     XImage *image_create();
  773.  
  774.     v = XDefaultVisualOfScreen(XDefaultScreenOfDisplay(dpy));
  775.     d = XDefaultDepthOfScreen(XDefaultScreenOfDisplay(dpy));
  776.     if((oscil_im = image_create(dpy, black, white, oscil_bits, oscil_width, oscil_height, d)) == (XImage *) NULL)
  777.         exit(-1);
  778.  
  779.     if((evp_im = image_create(dpy, black, white, evp_bits, evp_width, evp_height, d)) == (XImage *) NULL)
  780.         exit(-1);
  781.  
  782.     if((buzz_im = image_create(dpy, black, white, buzz_bits, buzz_width, buzz_height, d)) == (XImage *) NULL)
  783.         exit(-1);
  784.  
  785.     if((rect_im = image_create(dpy, black, white, rect_bits, rect_width, rect_height, d)) == (XImage *) NULL)
  786.         exit(-1);
  787.  
  788.     if((dot_im = image_create(dpy, black, white, dot_bits, dot_width, dot_height, d)) == (XImage *) NULL)
  789.         exit(-1);
  790.  
  791.     if((add_im = image_create(dpy, black, white, add_bits, add_width, add_height, d)) == (XImage *) NULL)
  792.         exit(-1);
  793.  
  794.     if((subtract_im = image_create(dpy, black, white, subtract_bits, subtract_width, subtract_height, d)) == (XImage *) NULL)
  795.         exit(-1);
  796.  
  797.     if((multiply_im = image_create(dpy, black, white, multiply_bits, multiply_width, multiply_height, d)) == (XImage *) NULL)
  798.         exit(-1);
  799.  
  800.     if((divide_im = image_create(dpy, black, white, divide_bits, divide_width, divide_height, d)) == (XImage *) NULL)
  801.         exit(-1);
  802.  
  803.     if((out_im = image_create(dpy, black, white, out_bits, out_width, out_height, d)) == (XImage *) NULL)
  804.         exit(-1);
  805. }
  806.  
  807. void setup_mbar()
  808. {
  809.     unsigned long g_mask;
  810.     long e_mask;
  811.     XGCValues gcv;
  812.  
  813.     if ((menu_bar = canvas_create(progname, dpy, mwin,
  814.             LXC_WIDTH, MFRAME_WIDTH,
  815.             LXC_HEIGHT, MFRAME_HEIGHT,
  816.             LXC_NULL)) == (Canvas *) NULL)
  817.         exit(-1);
  818.     
  819.     mbar_win = *((Window *) canvas_get(menu_bar, LXC_WINDOW));
  820.     mbar_pm = *((Pixmap *) canvas_get(menu_bar, LXC_PIXMAP));
  821.  
  822.     /* Choose events menu bar uses */
  823.  
  824.     e_mask = ExposureMask | ButtonPressMask | ButtonReleaseMask;
  825.     XSelectInput(dpy, mbar_win, e_mask);
  826.  
  827.     /* GC for menu bar */
  828.  
  829.     g_mask = GCFunction | GCFont | GCForeground | GCBackground;
  830.     gcv.function = GXcopy;
  831.     gcv.font = fontstruct->fid;
  832.     gcv.foreground = black;
  833.     gcv.background = white;
  834.     mbar_gc = XCreateGC(dpy, mbar_win, g_mask, &gcv);
  835.  
  836.     draw_menubar();
  837.     setup_menus();
  838. }
  839.